// 包含自定义头文件
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include "../widgets/ToggleButton.h"
#include "../common/utils.h"
// 包含系统/库头文件
#include <QMessageBox>
#include <iostream>
#include <QTimer>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
      , ui(new Ui::MainWindow) {
    ui->setupUi(this); // 设置用户界面

    // 绑定手动连接button事件
    connect(ui->pushButton03, &QPushButton::clicked, this, &MainWindow::clickpushButton03Event);

    ui->pushButton04->setStyleSheet(
        // 默认状态（常规显示）
        "QPushButton {background-color: green; color: white; border: none; padding: 5px;}"
    );
    ui->label01->setText("绿色");

    // 绑定信号函数与槽函数
    connect(ui->pushButton11, &ToggleButton::isGreenChanged, this, &MainWindow::changeColorEvent);
    
    // 使用定时器更新时间显示，避免线程问题
    // 1. QTimer 不会阻塞主线程，后面的逻辑会继续执行，同时告诉Qt的事件循环：“每100ms发一次timeout信号”。
    // 2. 主线程是否被阻塞，取决于槽函数逻辑：
    // 2.1. 更新 UI、处理一些轻量逻辑 → 不会阻塞;
    // 2.2. 阻塞 Qt 线程，处理一些重量级逻辑（如sleep(2)、大循环、文件/数据库长时间读写） → 阻塞。
    timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, &MainWindow::updateDateTime);
    timer->start(100); // 每500毫秒更新一次
}

MainWindow::~MainWindow() {
    delete ui;
}

void MainWindow::updateDateTime() {
    std::string date = DateUtils::getCurrentTime();
    ui->label02->setText(QString::fromStdString(date));
}

// 槽函数的实现
void MainWindow::changeColorEvent(bool flag) {
    ui->label->setText("changeColorEvent..." + QString(flag ? "true" : "false"));
}

void MainWindow::on_pushButton04_clicked() {
    isGreen = !isGreen;
    if (isGreen) {
        ui->pushButton11->setIsGreen(true);
        ui->pushButton12->setIsGreen(true);
        ui->pushButton13->setIsGreen(true);
        ui->label01->setText("绿色");
        ui->pushButton04->setStyleSheet(
            // 默认状态（常规显示）
            "QPushButton {background-color: green; color: white; border: none; padding: 5px;}"
        );
    } else {
        ui->label01->setText("红色");
        ui->pushButton11->setIsGreen(false);
        ui->pushButton12->setIsGreen(false);
        ui->pushButton13->setIsGreen(false);
        ui->pushButton04->setStyleSheet(
            // 默认状态（常规显示）
            "QPushButton {background-color: red; color: white; border: none; padding: 5px;}"
        );
    }
}

void MainWindow::on_pushButton01_clicked() {
    // 弹出一个消息框
    QMessageBox::information(this, "提示", "这是一个弹窗(自动连接)，你可以手动关闭。");
}

void MainWindow::clickpushButton03Event() {
    // 弹出一个消息框
    QMessageBox::information(this, "提示", "这是一个弹窗(手动连接)，你可以手动关闭。");
}